package com.example.propertymanagement.controller;

import com.example.propertymanagement.entity.Property;
import com.example.propertymanagement.service.PropertyService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * PropertyController：房产相关的 HTTP 请求处理
 */
@RestController
@RequestMapping("/api/properties")  // 房产相关的API路径
public class PropertyController {

    @Autowired
    private PropertyService propertyService;  // 注入 PropertyService 用于业务处理

    /**
     * 获取所有房产
     * @return 房产列表
     */
    @GetMapping
    public List<Property> getAllProperties() {
        return propertyService.getAllProperties();  // 获取所有房产
    }

    /**
     * 根据小区ID获取房产列表
     * @param communityId 小区ID
     * @return 房产列表
     */
    @GetMapping("/community/{communityId}")
    public List<Property> getPropertiesByCommunity(@PathVariable Integer communityId) {
        return propertyService.getPropertiesByCommunity(communityId);  // 获取小区的房产
    }

    /**
     * 根据房屋状态获取房产列表（空置 / 已入住）
     * @param status 房屋状态：0 空置，1 已入住
     * @return 房产列表
     */
    @GetMapping("/status/{status}")
    public List<Property> getPropertiesByStatus(@PathVariable Integer status) {
        return propertyService.getPropertiesByStatus(status);  // 根据状态获取房产
    }

    /**
     * 创建新的房产
     * @param property 房产对象
     * @return 创建后的房产对象
     */
    @PostMapping
    public Property createProperty(@RequestBody Property property) {
        return propertyService.createProperty(property);  // 创建房产
    }

    /**
     * 更新房产信息
     * @param id 房产ID
     * @param property 更新后的房产对象
     * @return 更新后的房产对象
     */
    @PutMapping("/{id}")
    public Property updateProperty(@PathVariable Integer id, @RequestBody Property property) {
        property.setId(id);  // 设置房产ID
        return propertyService.updateProperty(property);  // 更新房产
    }

    /**
     * 删除房产
     * @param id 房产ID
     */
    @DeleteMapping("/{id}")
    public void deleteProperty(@PathVariable Integer id) {
        propertyService.deleteProperty(id);  // 删除房产
    }

    /**
     * 更新房产状态（空置 / 已入住）
     * @param id 房产ID
     * @param status 房产状态：0 空置，1 已入住
     */
    @PutMapping("/{id}/status/{status}")
    public void updatePropertyStatus(@PathVariable Integer id, @PathVariable Integer status) {
        propertyService.updatePropertyStatus(id, status);  // 更新房产状态
    }
}
